package com.mibus.mibusmobile;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.*;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class LoginActivity extends Activity implements OnClickListener,AdapterView.OnItemSelectedListener {

    private EditText etUsuario;
    private EditText etClave;
    private Button btnLogin;
    private Button btnActualiarSpinnerPlacas;
    private String user= "";
    private String clave = "";
    private String placa = "";
    private Spinner spPlacas;
    private JSONArray JSONbuses;
    private SimpleDateFormat dateFormater;
    MySQLiteHelperConductor dbHelper;
    private final String MOBILE_APP_URL = "http://mibus.eia.edu.co/Tablet/";
    ErrorLog log;

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.loginlayout);

        etUsuario = (EditText) findViewById(R.id.etUsuario);
        etClave = (EditText) findViewById(R.id.etClave);
        btnLogin = (Button) findViewById(R.id.btnLogin);
        spPlacas = (Spinner) findViewById(R.id.spPlacas);
        btnActualiarSpinnerPlacas = (Button) findViewById(R.id.btnActualiarSpinnerPlacas);
        dateFormater = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        dbHelper= new MySQLiteHelperConductor(this);

        btnLogin.setOnClickListener(this);
        btnActualiarSpinnerPlacas.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                placa = "";
                placasGet();
            }
        });
        if (!dbHelper.getInfo(1).getAsString("_id").equals("no hay nada")){
            ContentValues informacionConductor = dbHelper.getInfo(1);
            String fechaActualStr = dateFormater.format(new Date());
            String fechaLoginStr = informacionConductor.getAsString("fecha");

            try {
                Date fechaActual = dateFormater.parse(fechaActualStr);
                Date fechaLogin = dateFormater.parse(fechaLoginStr);

                if (((fechaActual.getTime()-fechaLogin.getTime()) / (1000*60)) < 90){
                    Toast.makeText(getBaseContext(), "Autologin", Toast.LENGTH_SHORT).show();
                    pasarInicioRecorrido(
                            informacionConductor.getAsString("hash"),
                            informacionConductor.getAsString("update_time"),
                            informacionConductor.getAsString("id_conductor"),
                            informacionConductor.getAsString("id_bus")
                    );
                }
            } catch (ParseException e) {
                Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
            }
        }
        placasGet();
        try {
            File folder = new File(Environment.getExternalStorageDirectory() + "/miBus");
            if (!folder.exists()) {
                folder.mkdir();
            }
        }catch (Exception e){
            Log.i("error","CreandoCarpte pailas");
            Toast.makeText(getApplicationContext(),"Error al crear la carpeta miBus",Toast.LENGTH_SHORT);
        }
        Log.i("path",Environment.getExternalStorageDirectory() + "/miBus");
    }


    @Override
    public void onClick(View view) {
        if(view.getId() == R.id.btnLogin){
            user = etUsuario.getText().toString();
            clave = etClave.getText().toString();

            if(user.length() != 0 && clave.length()!= 0 && !placa.equals("")){
                List<NameValuePair> userData=new ArrayList<NameValuePair>();
                userData.add(new BasicNameValuePair("usuario", user));
                userData.add(new BasicNameValuePair("clave", clave));
                userData.add(new BasicNameValuePair("placa", placa));

                RequestPost requestPost = new RequestPost(userData, this);
                try{
                    String resultado = requestPost.execute(MOBILE_APP_URL+"login").get();
                    if(!resultado.equals("0") && !resultado.equals("1") && !resultado.equals("NoInternet")){
                        JSONObject recibido = new JSONObject(resultado);
                        String hash = recibido.getString("hash");
                        String update_time = recibido.getString("update_time");
                        String id_conductor = recibido.getString("id_conductor");
                        String id_bus = recibido.getString("id_bus");

                        String fecha = dateFormater.format(new Date());

                        if(dbHelper.getInfo(1).getAsString("_id").equals("no hay nada")){
                            dbHelper.addInfo(user, clave, id_conductor, id_bus, fecha, hash, update_time);
                        }else{
                            dbHelper.updateInfo(user, clave, id_conductor, id_bus, fecha, hash, update_time, 1);
                        }

                        pasarInicioRecorrido(hash, update_time, id_conductor, id_bus);
                        Toast.makeText(getApplicationContext(),"Ingreso correctamente", Toast.LENGTH_SHORT).show();
                    }
                    else if(resultado.equals("0")){
                        Toast.makeText(getApplicationContext(),"Usuario, contrasena o placa incorrecta", Toast.LENGTH_SHORT).show();
                    }else if(resultado.equals("1")){
                        Toast.makeText(getApplicationContext(),"Hubo un error por favor intentelo de nuevo", Toast.LENGTH_SHORT).show();
                    }else if(resultado.equals("NoInternet")){
                        Toast.makeText(getApplicationContext(),"No hay conexion a internet", Toast.LENGTH_SHORT).show();
                    }
                }catch (Exception e){
                    Toast.makeText(getApplicationContext(), "Hubo un error en el servidor", Toast.LENGTH_SHORT).show();
                    e.printStackTrace();
                }
            }else{
                Toast.makeText(getApplicationContext(), "Usuario, contrasena o placa estan vacios", Toast.LENGTH_SHORT).show();
            }

        }
    }

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long l) {
        Spinner spinner = (Spinner)adapterView;
        String itemSeleccionado = adapterView.getItemAtPosition(pos).toString();
        if(spinner.getId() == R.id.spPlacas){
            if(pos!=0){
                placa = itemSeleccionado;
            }else{
               placa = "";
            }
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }

    private void pasarInicioRecorrido(String hash, String update_time, String id_conductor, String id_bus){
        Intent intent = new Intent(LoginActivity.this, RecorridoActivity.class);
        Bundle bundleEmisor = new Bundle();


        bundleEmisor.putString("hash_session",hash);
        bundleEmisor.putString("update_time",update_time);
        bundleEmisor.putString("id_conductor",id_conductor);
        bundleEmisor.putString("id_bus",id_bus);

        intent.putExtras(bundleEmisor);
        startActivity(intent);
        etUsuario.setText("");
        etClave.setText("");
        spPlacas.setSelection(0);
        etUsuario.requestFocus();
        //this.finish();
    }

    private void placasGet(){
        try{
            RequestGet requestGet = new RequestGet(this);
            List<String> contenidoSpinner =  new ArrayList<String>();
            String resultado = requestGet.execute(MOBILE_APP_URL+"buses_get").get();
            if (!resultado.equals("NoInternet")) {
                Log.i("error",resultado);
                JSONbuses = new JSONArray(resultado);//requestGet.execute(MOBILE_APP_URL+"buses_get").get();
                if (JSONbuses.length() > 0) {
                    contenidoSpinner.add("Seleccionar Placa");

                    for (int i = 0; i < JSONbuses.length(); i++) {
                        JSONObject objectoJson = JSONbuses.getJSONObject(i);
                        JSONObject jsonBus = objectoJson.getJSONObject("Bus");

                        if (!contenidoSpinner.contains(jsonBus.getString("placa"))) {
                            contenidoSpinner.add(jsonBus.getString("placa"));
                        }
                    }
                    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item, contenidoSpinner);

                    spPlacas.setAdapter(adapter);
                    spPlacas.setOnItemSelectedListener(this);
                } else {
                    contenidoSpinner.add("No hay buses disponibles");
                    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item, contenidoSpinner);
                    spPlacas.setAdapter(adapter);
                }
            }else{
                Toast.makeText(getApplicationContext(),"No hay conexion a internet, por favor presione el boton actualizar", Toast.LENGTH_LONG).show();
            }
        }catch (Exception e){
            Toast.makeText(getApplicationContext(),"No se pudo obtener las placas, por favor presione el boton actualizar", Toast.LENGTH_LONG).show();

        }
    }

}